package com.example.smartpark.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.smartpark.common.Result;
import com.example.smartpark.dto.FeeStandardDTO;
import com.example.smartpark.dto.FeeStandardQueryDTO;
import com.example.smartpark.service.FeeStandardService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * 管理员收费标准控制器
 */
@Slf4j
@RestController
@RequestMapping("/api/admin/fee-standards")
public class AdminFeeStandardController {

    @Autowired
    private FeeStandardService feeStandardService;

    /**
     * 分页查询收费标准列表
     *
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    @GetMapping
    public Result<IPage<FeeStandardDTO>> getFeeStandardPage(FeeStandardQueryDTO queryDTO) {
        log.info("管理员查询收费标准列表: {}", queryDTO);
        IPage<FeeStandardDTO> page = feeStandardService.getFeeStandardPage(queryDTO);
        return Result.success(page);
    }

    /**
     * 获取收费标准详情
     *
     * @param id 收费标准ID
     * @return 收费标准详情
     */
    @GetMapping("/{id}")
    public Result<FeeStandardDTO> getFeeStandardDetail(@PathVariable Integer id) {
        log.info("管理员获取收费标准详情: {}", id);
        FeeStandardDTO feeStandardDTO = feeStandardService.getFeeStandardById(id);
        return Result.success(feeStandardDTO);
    }

    /**
     * 创建收费标准
     *
     * @param feeStandardDTO 收费标准信息
     * @return 创建后的收费标准
     */
    @PostMapping
    public Result<FeeStandardDTO> createFeeStandard(@RequestBody @Valid FeeStandardDTO feeStandardDTO) {
        log.info("创建收费标准: {}", feeStandardDTO);
        FeeStandardDTO createdDTO = feeStandardService.createFeeStandard(feeStandardDTO);
        return Result.success(createdDTO);
    }

    /**
     * 更新收费标准
     *
     * @param id 收费标准ID
     * @param feeStandardDTO 收费标准信息
     * @return 更新后的收费标准
     */
    @PutMapping("/{id}")
    public Result<FeeStandardDTO> updateFeeStandard(
            @PathVariable Integer id,
            @RequestBody @Valid FeeStandardDTO feeStandardDTO) {
        log.info("更新收费标准: id={}, data={}", id, feeStandardDTO);
        FeeStandardDTO updatedDTO = feeStandardService.updateFeeStandard(id, feeStandardDTO);
        return Result.success(updatedDTO);
    }

    /**
     * 删除收费标准
     *
     * @param id 收费标准ID
     * @return 是否成功
     */
    @DeleteMapping("/{id}")
    public Result<Boolean> deleteFeeStandard(@PathVariable Integer id) {
        log.info("删除收费标准: {}", id);
        boolean result = feeStandardService.deleteFeeStandard(id);
        return Result.success(result);
    }

    /**
     * 更改收费标准状态
     *
     * @param id 收费标准ID
     * @param status 状态
     * @return 更新后的收费标准
     */
    @PutMapping("/{id}/status")
    public Result<FeeStandardDTO> changeFeeStandardStatus(
            @PathVariable Integer id,
            @RequestBody Integer status) {
        log.info("更改收费标准状态: id={}, status={}", id, status);
        FeeStandardDTO updatedDTO = feeStandardService.changeFeeStandardStatus(id, status);
        return Result.success(updatedDTO);
    }
} 